<template>
  <view class="page_root" data-page-name="审批列表" data-page-identification="p_zrpz3wvl9b">
    <!-- UNI_APP_EXEGESIS_START NAVIGATION_TEMPLATE UNI_APP_EXEGESIS_END -->
    <!-- begin vid_djtsbbxwon 自定义模板_ull3ne7chh -->
    <view class="custom-tabs">
      <view class="custom-tab" :class="{ active: state.current === 0 }" @click="tabChange(0)">
        {{ tabList[0].name }}
        <!-- <span v-if="state.current === 0" class="custom-tab-underline"></span> -->
        <view class="circle">
          <span class="tip-num">{{ state.todoList.length }}</span>
        </view>
      </view>
      <view class="border-middle"></view>
      <view class="custom-tab" :class="{ active: state.current === 1 }" @click="tabChange(1)">
        {{ tabList[1].name }}
        <!-- <span v-if="state.current === 1" class="custom-tab-underline"></span> -->
        <view class="circle">
          <span class="tip-num">{{ state.myCreate.length }}</span>
        </view>
      </view>
      <view class="border-middle1"></view>
      <view class="custom-tab" :class="{ active: state.current === 2 }" @click="tabChange(2)">
        {{ tabList[2].name }}
        <!-- <span v-if="state.current === 2" class="custom-tab-underline"></span> -->
        <view class="circle">
          <span class="tip-num">{{ state.doneList.length }}</span>
        </view>
      </view>
    </view>
    <u-row class="search-params">
      <u-col :span="6">
        <u-popup-box
          componentName="u-cascader-asymmetric"
          mode="tree"
          v-model:modelValue="state.searchParams.projectId"
          placeholder="项目名称"
          :border="false"
          :options="state.projectList"
          :fieldNames="state.fieldNames"
        >
        </u-popup-box>
      </u-col>
      <u-col :span="3">
        <u-input :modelValue="state.owner" type="select" @click="state.ownerVisible = true" />
        <u-select
          v-model:modelValue="state.ownerVisible"
          @confirm="handleOwnerConfirm"
          :pickValue="[state.searchParams.taskStatus]"
          mode="single-column"
          label-name="userName"
          value-name="userId"
          :list="state.submitterList"
          :clearable="false"
        ></u-select>
      </u-col>
      <u-col :span="3">
        <u-input :modelValue="state.timeName" type="select" @click="state.timeVisible = true" />
        <u-calendar
          ref="calendarRef"
          v-model="state.timeVisible"
          mode="range"
          tooltip="选择开始和结束时间"
          @change="handleTimeConfirm"
        ></u-calendar>
      </u-col>
    </u-row>
    <view class="main">
      <view class="bgc-img"></view>
      <view class="top-tip">
        <u-notice-bar
          type="warning"
          mode="horizontal"
          bg-color="#F9EDDD"
          color="#FFAA3A"
          style="position: relative; z-index: 10"
          font-size="14px"
          :list="state.TipList"
          border-radius="8"
        ></u-notice-bar>
      </view>
      <!-- 审批列表 -->
      <view
        v-for="(item, index) in state.todoList"
        :key="index"
        class="approve-item"
        v-if="state.todoList.length > 0 && state.tabTitle === '我的待办'"
      >
        <template v-if="isProject(item.processName)">
          <view class="item-title">{{ item.formDataList[0].projectName }}</view>
          <view class="item-content-top">
            <view class="item-bottom-title">
              <span class="work-title">项目总监：</span>
              <span class="bottom-work-num"> {{ item.formDataList[0].projectDirector }}</span>
            </view>
            <view class="item-bottom-title">
              <span class="work-title">项目经理：</span
              ><span class="bottom-work-num"> {{ item.formDataList[0].pmName }}</span>
            </view>
            <view class="item-line"></view>
          </view>
        </template>
        <template v-else>
          <view class="item-title">{{
            item.formDataList[0].taskName ? item.formDataList[0].taskName : item.processName
          }}</view>

          <view class="item-content-top" v-if="item.formDataList[0].taskName">
            <view class="item-bottom-title">
              <span class="work-title">项目：</span
              ><span class="bottom-work-num"> {{ item.formDataList[0].projectName }}</span>
            </view>
            <view class="item-bottom-title">
              <span class="work-title">项目阶段：</span
              ><span class="bottom-work-num"> {{ item.formDataList[0].milepostName }}</span>
            </view>
            <view class="item-line"></view>
          </view>
        </template>

        <view class="item-people">
          <span class="people-work-title">提交人：</span
          ><span class="people-bottom-work-num">{{ item.createdByName }}</span>
        </view>
        <view class="item-content-bottom">
          <!-- <view class="item-bottom-title">
            <span class="work-title">部门：</span><span class="bottom-work-num">{{ item.formDataList[0].department
            }}</span>
        </view> -->
          <view class="item-bottom-title">
            <span class="work-title">申请时间：</span
            ><span class="bottom-work-num">{{ item.createdDate }}</span>
          </view>
          <view class="item-bottom-title">
            <span class="work-title">当前节点：</span
            ><span class="bottom-work-num">{{ item.taskName }}</span>
          </view>
          <view class="item-bottom-title">
            <span class="work-title">当前节点人员：</span
            ><span class="bottom-work-num">{{ item.waitHandleUserList[0] }}</span>
          </view>
        </view>

        <view class="bottom-btn-wrapper">
          <view style="display: flex">
            <view class="bottom-btn-name"> {{ item.processName }} </view>

            <view class="bottom-btn-handle" v-if="item.processStatus === 'IN_PROCESS'">
              审批中</view
            >
            <view class="bottom-btn-reject" v-else-if="item.processStatus === 'REJECT'">
              已拒绝</view
            >
            <view class="bottom-btn-success" v-else-if="item.processStatus === 'APPROVED'">
              已通过</view
            >
            <view class="bottom-btn-revoke" v-else-if="item.processStatus === 'REVOKE'">
              已撤销</view
            >
            <view class="bottom-btn-revoke" v-else-if="item.processStatus === 'END'"> 已结束</view>
          </view>
          <view
            class="bottom-btn"
            @click="
              handleDetail(
                item.formDataList[0].taskId,
                item.processName,
                item.processInstanceId,
                item.taskId,
                item.projectName,
                item.milepostName,
              )
            "
          >
            详情
          </view>
        </view>
      </view>
      <view
        v-for="(item, index) in state.myCreate"
        :key="index"
        class="approve-item"
        v-if="state.myCreate.length > 0 && state.tabTitle === '我发起的'"
      >
        <template v-if="isProject(item.processName)">
          <view class="item-title">{{ item.formDataList[0].projectName }}</view>
          <view class="item-content-top">
            <view class="item-bottom-title">
              <span class="work-title">项目总监：</span>
              <span class="bottom-work-num"> {{ item.formDataList[0].projectDirector }}</span>
            </view>
            <view class="item-bottom-title">
              <span class="work-title">项目经理：</span
              ><span class="bottom-work-num"> {{ item.formDataList[0].pmName }}</span>
            </view>
            <view class="item-line"></view>
          </view>
        </template>
        <template v-else>
          <view class="item-title">{{
            item.formDataList[0].taskName ? item.formDataList[0].taskName : item.processName
          }}</view>

          <view class="item-content-top" v-if="item.formDataList[0].taskName">
            <view class="item-bottom-title">
              <span class="work-title">项目：</span
              ><span class="bottom-work-num"> {{ item.formDataList[0].projectName }}</span>
            </view>
            <view class="item-bottom-title">
              <span class="work-title">项目阶段：</span
              ><span class="bottom-work-num"> {{ item.formDataList[0].milepostName }}</span>
            </view>
            <view class="item-line"></view>
          </view>
        </template>
        <view class="item-people">
          <span class="work-title">提交人：</span
          ><span class="bottom-work-num">{{ item.createdByName }}</span>
        </view>
        <view class="item-content-bottom">
          <!-- <view class="item-bottom-title">
                            <span class="work-title">部门：</span><span class="bottom-work-num">{{ item.formDataList[0].department
                            }}</span>
                        </view> -->
          <view class="item-bottom-title">
            <span class="work-title">申请时间：</span
            ><span class="bottom-work-num">{{ item.createdDate }}</span>
          </view>
          <view class="item-bottom-title">
            <span class="work-title">当前节点：</span
            ><span class="bottom-work-num">{{ item.taskName }}</span>
          </view>
          <view class="item-bottom-title">
            <span class="work-title">当前节点人员：</span
            ><span class="bottom-work-num">{{ item.waitHandleUserList[0] }}</span>
          </view>
        </view>
        <view class="bottom-btn-wrapper">
          <view style="display: flex">
            <view class="bottom-btn-name"> {{ item.processName }} </view>

            <view class="bottom-btn-handle" v-if="item.processStatus === 'IN_PROCESS'">
              审批中</view
            >
            <view class="bottom-btn-reject" v-else-if="item.processStatus === 'REJECT'">
              已拒绝</view
            >
            <view class="bottom-btn-success" v-else-if="item.processStatus === 'APPROVED'">
              已通过</view
            >
            <view class="bottom-btn-revoke" v-else-if="item.processStatus === 'REVOKE'">
              已撤销</view
            >
            <view class="bottom-btn-revoke" v-else-if="item.processStatus === 'END'"> 已结束</view>
          </view>
          <view
            class="bottom-btn"
            @click="
              handleDetail(
                item.formDataList[0].taskId,
                item.processName,
                item.processInstanceId,
                item.taskId,
                item.projectName,
                item.milepostName,
                item.processStatus,
              )
            "
          >
            详情
          </view>
        </view>
      </view>
      <view
        v-for="(item, index) in state.doneList"
        :key="index"
        class="approve-item"
        v-if="state.doneList.length > 0 && state.tabTitle === '我处理的'"
      >
        <template v-if="isProject(item.processName)">
          <view class="item-title">{{ item.formDataList[0].projectName }}</view>
          <view class="item-content-top">
            <view class="item-bottom-title">
              <span class="work-title">项目总监：</span>
              <span class="bottom-work-num"> {{ item.formDataList[0].projectDirector }}</span>
            </view>
            <view class="item-bottom-title">
              <span class="work-title">项目经理：</span
              ><span class="bottom-work-num"> {{ item.formDataList[0].pmName }}</span>
            </view>
            <view class="item-line"></view>
          </view>
        </template>
        <template v-else>
          <view class="item-title">{{
            item.formDataList[0].taskName ? item.formDataList[0].taskName : item.processName
          }}</view>

          <view class="item-content-top" v-if="item.formDataList[0].taskName">
            <view class="item-bottom-title">
              <span class="work-title">项目：</span
              ><span class="bottom-work-num"> {{ item.formDataList[0].projectName }}</span>
            </view>
            <view class="item-bottom-title">
              <span class="work-title">项目阶段：</span
              ><span class="bottom-work-num"> {{ item.formDataList[0].milepostName }}</span>
            </view>
            <view class="item-line"></view>
          </view>
        </template>
        <view class="item-people">
          <span class="work-title">提交人：</span
          ><span class="bottom-work-num">{{ item.createdByName }}</span>
        </view>
        <view class="item-content-bottom">
          <!-- <view class="item-bottom-title">
                            <span class="work-title">部门：</span><span class="bottom-work-num">{{ item.formDataList[0].department
                            }}</span>
                        </view> -->
          <view class="item-bottom-title">
            <span class="work-title">申请时间：</span
            ><span class="bottom-work-num">{{ item.createdDate }}</span>
          </view>
          <view class="item-bottom-title">
            <span class="work-title">当前节点：</span
            ><span class="bottom-work-num">{{ item.taskName }}</span>
          </view>
          <view class="item-bottom-title">
            <span class="work-title">当前节点人员：</span
            ><span class="bottom-work-num">{{ item.waitHandleUserList[0] }}</span>
          </view>
        </view>
        <view class="bottom-btn-wrapper">
          <view style="display: flex">
            <view class="bottom-btn-name"> {{ item.processName }} </view>
            <view class="bottom-btn-handle" v-if="item.processStatus === 'IN_PROCESS'">
              审批中</view
            >
            <view class="bottom-btn-reject" v-else-if="item.processStatus === 'REJECT'">
              已拒绝</view
            >
            <view class="bottom-btn-success" v-else-if="item.processStatus === 'APPROVED'">
              已通过</view
            >
            <view class="bottom-btn-revoke" v-else-if="item.processStatus === 'REVOKE'">
              已撤销</view
            >
            <view class="bottom-btn-revoke" v-else-if="item.processStatus === 'END'"> 已结束</view>
          </view>
          <view
            class="bottom-btn"
            @click="
              handleDetail(
                item.formDataList[0].taskId,
                item.processName,
                item.processInstanceId,
                item.taskId,
                item.projectName,
                item.milepostName,
              )
            "
          >
            详情
          </view>
        </view>
      </view>
      <view
        v-else-if="state.tabTitle === '我处理的' && state.doneList.length == 0"
        class="no-content"
      >
        <view class="no-content-img">
          <view class="no-content-tip">暂无数据</view>
        </view>
      </view>
      <view
        v-else-if="state.tabTitle === '我发起的' && state.myCreate.length == 0"
        class="no-content"
      >
        <view class="no-content-img">
          <view class="no-content-tip">暂无数据</view>
        </view>
      </view>
      <view
        v-else-if="state.tabTitle === '我的待办' && state.todoList.length == 0"
        class="no-content"
      >
        <view class="no-content-img">
          <view class="no-content-tip">暂无数据</view>
        </view>
      </view>
    </view>
    <!-- end vid_djtsbbxwon 自定义模板_ull3ne7chh -->
  </view>
</template>
<script setup>
import {
  ref,
  reactive,
  toRaw,
  markRaw,
  watch,
  computed,
  onBeforeMount,
  onMounted,
  onBeforeUnmount,
  onUnmounted,
  onActivated,
  onDeactivated,
  getCurrentInstance,
} from 'vue';
import { useRoute } from 'vue-router';
const route = useRoute();
import { get, post, put, del, request, requestWithHeaders } from '@/utils/http/Axios';
import {
  cloneDeep,
  localGet,
  traversalTreeStructure,
  set,
  checkCaseCondition,
  throttle,
  merge,
  debounce,
  getGridStyle,
  getCellRenderAble,
} from '@/utils/index';
import {
  isEqual,
  isNullOrEmpty,
  isEmptyArr,
  isArray,
  isEmpty,
  isNullOrUnDef,
  isContained,
} from '@/utils/is';
import { CovertOptions, getChartsDataSourceConvert } from '@/utils/chart';
import {
  propertyFormatByNumber,
  propertyFormatByPercentage,
  propertyFormatByDate,
} from '@/utils/format';
import { FormFormat } from '@/utils/formFormat';
import { customAddWaterMarkFunc, generateWaterMarkText } from '@/utils/addWaterMark';
import { handleRedirect } from '@/utils/common';
import {
  onPullDownRefresh,
  onLoad,
  onReady,
  onShow,
  onHide,
  onPageScroll,
  onUnload,
} from '@dcloudio/uni-app';
import dayjs from 'dayjs';
import hashSum from 'hash-sum';
/*** UNI_APP_EXEGESIS ***
  import { handleRedirect, permission, parseJson } from '@/utils/common';
  import { onPullDownRefresh, onLoad, onReady, onShow, onHide, onPageScroll, onUnload } from '@dcloudio/uni-app';
  import { BroadcastMessage } from '@/utils/BroadcastMessage';
  import { sendToken } from "@/hooks/useIframeToken";
  *** UNI_APP_EXEGESIS ***/

// ---------------------------- 属性定义 ----------------------------
const sourceId = 'page3000000258';

// 是否显示菜单按钮
const isMenuIconShow = false;
// NAVIGATION_MENU
const handleShowNavigation = () => {};

let isProcessState = ref(false);

const setTimeOutList = [];

const vid_djtsbbxwon_props = reactive({
  code: '    <view class="custom-tabs">\n      <view class="custom-tab" :class="{ active: state.current === 0 }" @click="tabChange(0)">\n        {{ tabList[0].name }}\n        <!-- <span v-if="state.current === 0" class="custom-tab-underline"></span> -->\n        <view class="circle">\n          <span class="tip-num">{{ state.todoList.length }}</span>\n        </view>\n      </view>\n      <view class="border-middle"></view>\n      <view class="custom-tab" :class="{ active: state.current === 1 }" @click="tabChange(1)">\n        {{ tabList[1].name }}\n        <!-- <span v-if="state.current === 1" class="custom-tab-underline"></span> -->\n        <view class="circle">\n          <span class="tip-num">{{ state.myCreate.length }}</span>\n        </view>\n      </view>\n      <view class="border-middle1"></view>\n      <view class="custom-tab" :class="{ active: state.current === 2 }" @click="tabChange(2)">\n        {{ tabList[2].name }}\n        <!-- <span v-if="state.current === 2" class="custom-tab-underline"></span> -->\n        <view class="circle">\n          <span class="tip-num">{{ state.doneList.length }}</span>\n        </view>\n      </view>\n    </view>\n    <u-row class="search-params">\n      <u-col :span="6">\n        <u-popup-box\n          componentName="u-cascader-asymmetric"\n          mode="tree"\n          v-model:modelValue="state.searchParams.projectId"\n          placeholder="项目名称"\n          :border="false"\n          :options="state.projectList"\n          :fieldNames="state.fieldNames"\n        >\n        </u-popup-box>\n      </u-col>\n      <u-col :span="3">\n        <u-input :modelValue="state.owner" type="select" @click="state.ownerVisible = true" />\n        <u-select\n          v-model:modelValue="state.ownerVisible"\n          @confirm="handleOwnerConfirm"\n          :pickValue="[state.searchParams.taskStatus]"\n          mode="single-column"\n          label-name="userName"\n          value-name="userId"\n          :list="state.submitterList"\n          :clearable="false"\n        ></u-select>\n      </u-col>\n      <u-col :span="3">\n        <u-input :modelValue="state.timeName" type="select" @click="state.timeVisible = true" />\n        <u-calendar ref="calendarRef" v-model="state.timeVisible" mode="range" tooltip="选择开始和结束时间" @change="handleTimeConfirm"></u-calendar>\n      </u-col>\n    </u-row>\n    <view class="main">\n      <view class="bgc-img"></view>\n      <view class="top-tip">\n        <u-notice-bar\n          type="warning"\n          mode="horizontal"\n          bg-color="#F9EDDD"\n          color="#FFAA3A"\n          style="position: relative ; z-index: 10;"\n          font-size="14px"\n          :list="state.TipList"\n          border-radius="8"\n        ></u-notice-bar>\n      </view>\n      <!-- 审批列表 -->\n      <view v-for="(item, index) in state.todoList" :key="index" class="approve-item" v-if="state.todoList.length > 0 && state.tabTitle === \'我的待办\'">\n        <template v-if="isProject(item.processName)">\n          <view class="item-title">{{ item.formDataList[0].projectName }}</view>\n          <view class="item-content-top">\n            <view class="item-bottom-title">\n              <span class="work-title">项目总监：</span>\n              <span class="bottom-work-num"> {{ item.formDataList[0].projectDirector }}</span>\n            </view>\n            <view class="item-bottom-title">\n              <span class="work-title">项目经理：</span><span class="bottom-work-num"> {{ item.formDataList[0].pmName }}</span>\n            </view>\n            <view class="item-line"></view>\n          </view>\n        </template>\n        <template v-else>\n          <view class="item-title">{{ item.formDataList[0].taskName?item.formDataList[0].taskName:\'日报审批\' }}</view>\n\n          <view class="item-content-top" v-if="item.formDataList[0].taskName">\n            <view class="item-bottom-title">\n              <span class="work-title">项目：</span><span class="bottom-work-num"> {{ item.formDataList[0].projectName }}</span>\n            </view>\n            <view class="item-bottom-title">\n              <span class="work-title">项目阶段：</span><span class="bottom-work-num"> {{ item.formDataList[0].milepostName }}</span>\n            </view>\n            <view class="item-line"></view>\n          </view>\n        </template>\n\n        <view class="item-people">\n          <span class="people-work-title">提交人：</span><span class="people-bottom-work-num">{{ item.createdByName }}</span>\n        </view>\n        <view class="item-content-bottom">\n          <!-- <view class="item-bottom-title">\n            <span class="work-title">部门：</span><span class="bottom-work-num">{{ item.formDataList[0].department\n            }}</span>\n        </view> -->\n          <view class="item-bottom-title">\n            <span class="work-title">申请时间：</span><span class="bottom-work-num">{{ item.createdDate }}</span>\n          </view>\n          <view class="item-bottom-title">\n            <span class="work-title">当前节点：</span><span class="bottom-work-num">{{ item.taskName }}</span>\n          </view>\n          <view class="item-bottom-title">\n            <span class="work-title">当前节点人员：</span><span class="bottom-work-num">{{ item.waitHandleUserList[0] }}</span>\n          </view>\n        </view>\n\n        <view class="bottom-btn-wrapper">\n          <view style="display: flex">\n            <view class="bottom-btn-name"> {{ item.processName }} </view>\n\n            <view class="bottom-btn-handle" v-if="item.processStatus === \'IN_PROCESS\'"> 审批中</view>\n            <view class="bottom-btn-reject" v-else-if="item.processStatus === \'REJECT\'"> 已拒绝</view>\n            <view class="bottom-btn-success" v-else-if="item.processStatus === \'APPROVED\'"> 已通过</view>\n            <view class="bottom-btn-revoke" v-else-if="item.processStatus === \'REVOKE\'"> 已撤销</view>\n            <view class="bottom-btn-revoke" v-else-if="item.processStatus === \'END\'"> 已结束</view>\n          </view>\n          <view class="bottom-btn" @click="handleDetail(item.formDataList[0].taskId, item.processName, item.processInstanceId, item.taskId, item.projectName, item.milepostName)"> 详情 </view>\n        </view>\n      </view>\n      <view v-for="(item, index) in state.myCreate" :key="index" class="approve-item" v-if="state.myCreate.length > 0 && state.tabTitle === \'我发起的\'">\n        <template v-if="isProject(item.processName)">\n          <view class="item-title">{{ item.formDataList[0].projectName }}</view>\n          <view class="item-content-top">\n            <view class="item-bottom-title">\n              <span class="work-title">项目总监：</span>\n              <span class="bottom-work-num"> {{ item.formDataList[0].projectDirector }}</span>\n            </view>\n            <view class="item-bottom-title">\n              <span class="work-title">项目经理：</span><span class="bottom-work-num"> {{ item.formDataList[0].pmName }}</span>\n            </view>\n            <view class="item-line"></view>\n          </view>\n        </template>\n        <template v-else>\n          <view class="item-title">{{ item.formDataList[0].taskName?item.formDataList[0].taskName:\'日报审批\' }}</view>\n\n          <view class="item-content-top" v-if="item.formDataList[0].taskName">\n            <view class="item-bottom-title">\n              <span class="work-title">项目：</span><span class="bottom-work-num"> {{ item.formDataList[0].projectName }}</span>\n            </view>\n            <view class="item-bottom-title">\n              <span class="work-title">项目阶段：</span><span class="bottom-work-num"> {{ item.formDataList[0].milepostName }}</span>\n            </view>\n            <view class="item-line"></view>\n          </view>\n        </template>\n        <view class="item-people">\n          <span class="work-title">提交人：</span\n          ><span class="bottom-work-num">{{\n          item.createdByName\n          }}</span>\n        </view>\n        <view class="item-content-bottom">\n          <!-- <view class="item-bottom-title">\n                            <span class="work-title">部门：</span><span class="bottom-work-num">{{ item.formDataList[0].department\n                            }}</span>\n                        </view> -->\n          <view class="item-bottom-title">\n            <span class="work-title">申请时间：</span><span class="bottom-work-num">{{ item.createdDate }}</span>\n          </view>\n          <view class="item-bottom-title">\n            <span class="work-title">当前节点：</span><span class="bottom-work-num">{{ item.taskName }}</span>\n          </view>\n          <view class="item-bottom-title">\n            <span class="work-title">当前节点人员：</span\n            ><span class="bottom-work-num">{{\n            item.waitHandleUserList[0]\n            }}</span>\n          </view>\n        </view>\n        <view class="bottom-btn-wrapper">\n          <view style="display: flex">\n            <view class="bottom-btn-name"> {{ item.processName }} </view>\n\n            <view class="bottom-btn-handle" v-if="item.processStatus === \'IN_PROCESS\'"> 审批中</view>\n            <view class="bottom-btn-reject" v-else-if="item.processStatus === \'REJECT\'"> 已拒绝</view>\n            <view class="bottom-btn-success" v-else-if="item.processStatus === \'APPROVED\'"> 已通过</view>\n            <view class="bottom-btn-revoke" v-else-if="item.processStatus === \'REVOKE\'"> 已撤销</view>\n            <view class="bottom-btn-revoke" v-else-if="item.processStatus === \'END\'"> 已结束</view>\n          </view>\n          <view class="bottom-btn" @click="handleDetail(item.formDataList[0].taskId, item.processName, item.processInstanceId, item.taskId, item.projectName, item.milepostName,item.processStatus)">\n            详情\n          </view>\n        </view>\n      </view>\n      <view v-for="(item, index) in state.doneList" :key="index" class="approve-item" v-if="state.doneList.length > 0 && state.tabTitle === \'我处理的\'">\n        <template v-if="isProject(item.processName)">\n          <view class="item-title">{{ item.formDataList[0].projectName }}</view>\n          <view class="item-content-top">\n            <view class="item-bottom-title">\n              <span class="work-title">项目总监：</span>\n              <span class="bottom-work-num"> {{ item.formDataList[0].projectDirector }}</span>\n            </view>\n            <view class="item-bottom-title">\n              <span class="work-title">项目经理：</span><span class="bottom-work-num"> {{ item.formDataList[0].pmName }}</span>\n            </view>\n            <view class="item-line"></view>\n          </view>\n        </template>\n        <template v-else>\n          <view class="item-title">{{ item.formDataList[0].taskName?item.formDataList[0].taskName:\'日报审批\' }}</view>\n\n          <view class="item-content-top" v-if="item.formDataList[0].taskName">\n            <view class="item-bottom-title">\n              <span class="work-title">项目：</span><span class="bottom-work-num"> {{ item.formDataList[0].projectName }}</span>\n            </view>\n            <view class="item-bottom-title">\n              <span class="work-title">项目阶段：</span><span class="bottom-work-num"> {{ item.formDataList[0].milepostName }}</span>\n            </view>\n            <view class="item-line"></view>\n          </view>\n        </template>\n        <view class="item-people">\n          <span class="work-title">提交人：</span\n          ><span class="bottom-work-num">{{\n          item.createdByName\n          }}</span>\n        </view>\n        <view class="item-content-bottom">\n          <!-- <view class="item-bottom-title">\n                            <span class="work-title">部门：</span><span class="bottom-work-num">{{ item.formDataList[0].department\n                            }}</span>\n                        </view> -->\n          <view class="item-bottom-title">\n            <span class="work-title">申请时间：</span><span class="bottom-work-num">{{ item.createdDate }}</span>\n          </view>\n          <view class="item-bottom-title">\n            <span class="work-title">当前节点：</span><span class="bottom-work-num">{{ item.taskName }}</span>\n          </view>\n          <view class="item-bottom-title">\n            <span class="work-title">当前节点人员：</span\n            ><span class="bottom-work-num">{{\n            item.waitHandleUserList[0]\n            }}</span>\n          </view>\n        </view>\n        <view class="bottom-btn-wrapper">\n          <view style="display: flex">\n            <view class="bottom-btn-name"> {{ item.processName }} </view>\n            <view class="bottom-btn-handle" v-if="item.processStatus === \'IN_PROCESS\'"> 审批中</view>\n            <view class="bottom-btn-reject" v-else-if="item.processStatus === \'REJECT\'"> 已拒绝</view>\n            <view class="bottom-btn-success" v-else-if="item.processStatus === \'APPROVED\'"> 已通过</view>\n            <view class="bottom-btn-revoke" v-else-if="item.processStatus === \'REVOKE\'"> 已撤销</view>\n            <view class="bottom-btn-revoke" v-else-if="item.processStatus === \'END\'"> 已结束</view>\n          </view>\n          <view class="bottom-btn" @click="handleDetail(item.formDataList[0].taskId, item.processName, item.processInstanceId, item.taskId, item.projectName, item.milepostName)"> 详情 </view>\n        </view>\n      </view>\n      <view v-else-if="state.tabTitle === \'我处理的\' && state.doneList.length == 0" class="no-content">\n        <view class="no-content-img">\n          <view class="no-content-tip">暂无数据</view>\n        </view>\n      </view>\n      <view v-else-if="state.tabTitle === \'我发起的\' && state.myCreate.length == 0" class="no-content">\n        <view class="no-content-img">\n          <view class="no-content-tip">暂无数据</view>\n        </view>\n      </view>\n      <view v-else-if="state.tabTitle === \'我的待办\' && state.todoList.length == 0" class="no-content">\n        <view class="no-content-img">\n          <view class="no-content-tip">暂无数据</view>\n        </view>\n      </view>\n    </view>',
});

// ============================ 属性定义 ============================

// ---------------------------- 元素数据引用 ----------------------------
// 组件 自定义模板_ull3ne7chh ref 的引用
const vid_djtsbbxwon_ref = ref(null);
// 动态key的map
const fieldTypeMap = {};
// 动态key的map
const refMap = { vid_djtsbbxwon_ref };

const showState = reactive({
  vid_djtsbbxwon_visible: true,
});
// ============================ 元素数据引用 ============================

// ---------------------------- 数据 ----------------------------

// ============================ 数据 ============================

// ---------------------------- 方法 ----------------------------
// ---------------------------- 页面数据 ----------------------------

// ============================ 页面数据 ============================

// ---------------------------- 响应 ----------------------------

// ============================ 响应 ============================

// ---------------------------- 函数 ----------------------------

// 自定义函数 返回上一页
const customFunction_goBack_qvw8kfvha5 = (...params) => {
  uni.navigateBack();
};

// ============================ 函数 ============================

// ---------------------------- 页面参数 ----------------------------

const pageParameter_state = reactive({
  processInstanceId: undefined,
});

// ============================ 页面参数 ============================

// ---------------------------- 组件事件处理方法 ----------------------------

// ============================ 组件事件处理方法 ============================

// ============================ 方法 ============================

// ---------------------------- 生命周期 ----------------------------
/*** UNI_APP_EXEGESIS ***
      // 获取上一层传递的数据
      const workflowChannel = new BroadcastMessage('WORKFLOW');
      workflowChannel.publish({ status: 'Ready' });
      workflowChannel.subscribe((data) => {
        if (data) {
          isProcessState.value = (window.self !== window.parent && data.type === 'hideHeader');
        }
      });
      *** UNI_APP_EXEGESIS ***/

const pageScrollTop = ref(0);

// *** PREVIEW_EXEGESIS ***
onMounted(() => {
  setPageParams(route.query);
  // 设置表单的rule
  try {
  } catch {
    // do nothing
  }
});
// *** PREVIEW_EXEGESIS *** //

/*** UNI_APP_EXEGESIS ***
  const routeOption = ref({})
  onLoad((option) => {
    routeOption.value = option;
  });
  onReady(() => {
    setPageParams(routeOption.value)
    // 设置表单的rule
    try{

    }catch{
        // do nothing
    }
  });
  // 图表刷新标记
  const uChartsReshowFlag = ref(false);
  onHide(() => { // 页面隐藏后标记置为false(如果不置为false无法触发图表更新)
      uChartsReshowFlag.value = false
  })
  onShow(() => {
      uChartsReshowFlag.value = true; // 页面激活后,标记置为true

      setPageParams(routeOption.value)
  })
  onPageScroll(e => {
      pageScrollTop.value = e.scrollTop
  });
  *** UNI_APP_EXEGESIS ***/

const setPageParams = (routerParam) => {
  const pageParams = [{ dataType: 'STRING', dependencies: [], name: 'processInstanceId' }];
  const strategyMap = {
    STRING: (param, paramValue) => {
      pageParameter_state[param.name] = paramValue;
    },
    BOOLEAN: (param, paramValue) => {
      if ('true' === (paramValue || '').toLowerCase()) {
        pageParameter_state[param.name] = true;
      } else if ('false' === (paramValue || '').toLowerCase()) {
        pageParameter_state[param.name] = false;
      } else {
        // TODO: 是否要支持toast
        console.error('参数传入错误！类型不匹配！');
      }
    },
    NUMBER: (param, paramValue) => {
      if (!isNaN(paramValue)) {
        pageParameter_state[param.name] = Number(paramValue);
      } else {
        // TODO: 是否要支持toast
        console.error('参数传入错误！类型不匹配！');
      }
    },
    ARRAY: (param, paramValue) => {
      if (isNullOrUnDef(paramValue) || !paramValue || paramValue === 'undefined') {
        // default value
        pageParameter_state[param.name] = [];
      } else if (paramValue.trim().startsWith('[') && paramValue.trim().endsWith(']')) {
        try {
          pageParameter_state[param.name] = JSON.parse(decodeURI(paramValue));
        } catch (error) {
          console.error('参数解析失败 ', error);
        }
      } else {
        console.error('参数传入错误！类型不匹配！');
      }
    },
  };
  pageParams.forEach((param) => {
    strategyMap[param.dataType](param, routerParam[param.name]);
  });
};

onUnmounted(() => {
  // 销毁定时器
  setTimeOutList.forEach(({ repeat, timer }) => {
    repeat ? clearInterval(timer) : clearTimeout(timer);
  });
});

/*** UNI_APP_EXEGESIS ***
  onPullDownRefresh(() => {
    // 下拉刷新
    setTimeout(() => {
        uni.stopPullDownRefresh()
    }, 1000)
  })
  *** UNI_APP_EXEGESIS ***/

// ============================ 生命周期 ============================

// ---------------------------- 数据关联处理 ----------------------------
// ---------------------------- 组件数据同步 ----------------------------

// ============================ 组件数据同步 ============================
//
// ============================ 数据关联处理 ============================

// ---------------------- 不同组件自定义的处理逻辑 ---------------------

// ====================== 不同组件自定义的处理逻辑 ======================

// ================================定制化逻辑========================================
onMounted(() => {
  let appDiv = document.querySelector('#app');
  appDiv.style.background = 'linear-gradient(180deg, #E1EFFD 100%, #ffffff 0%)';
  let topHeader = document.querySelector('.uni-page-head');
  if (topHeader) topHeader.remove();
  let warpper = document.querySelector('uni-page-wrapper');
  if (warpper) warpper.style.height = '100%';
  // 请求项目列表
  getProjectList();
});
const tabList = [
  {
    name: '我的待办',
  },
  {
    name: '我发起的',
  },
  {
    name: '我处理的',
  },
];
const calendarRef = ref();
const state = reactive({
  boradUrl: 'https://ppm.allintechinc.com/adv/adv-dpwtupxy/',
  current: 0,
  dataList: [],
  todoList: [],
  myCreate: [],
  doneList: [],
  myCreateParams: [],
  doneParams: [],
  todoParams: [],
  tabTitle: '我的待办',
  TipList: ['当前仅支持模板项目相关审批。'],

  todoSubmitter: [],
  myCreateSubmitter: [],
  doneSubmitter: [],
  ownerVisible: false,
  timeVisible: false,
  timeName: '提交时间',
  timeInfo: {},
  projectList: [],
  fieldNames: {
    label: 'name',
    value: 'id',
    children: 'children',
  },
  submitterList: [],
  searchParams: {
    projectId: null,
  },
  owner: '提交人',
  filter: {
    createdBy: '',
    createdDate: {
      type: 'datetime',
      min: '',
      max: '',
    },
  },
});

const isProject = computed(() => {
  return (name) => name.includes('项目');
});
const tabIndexFunctionMap = {
  0: getTodoList,
  1: getMyCreate,
  2: getDoneList,
};

watch(
  () => [state.filter, state.searchParams],
  () => {
    tabIndexFunctionMap[state.current]();
  },
  { deep: true },
);

function getProjectList() {
  get('/solution-ppm/api/v2/built-in-system-ppm/dashboard/project/tree').then(({ data }) => {
    // traversalTreeStructure1(data);
    state.projectList = data;
  });
}

// 递归遍历树结构 属性children为null则删除
function traversalTreeStructure1(tree) {
  tree.forEach((item) => {
    if (item.children) {
      traversalTreeStructure1(item.children);
    } else {
      delete item.children;
    }
  });
}

function handleOwnerConfirm(val) {
  if (!val.length && state.submitterList[0]) {
    val[0] = {};
    val[0].value = state.submitterList[0].userId;
    val[0].label = state.submitterList[0].userName;
  }
  state.owner = val[0].label;
  state.filter.createdBy = val[0].value;
}

function handleTimeConfirm(val) {
  state.timeName = val.startDate + '-' + val.endDate;
  state.filter.createdDate.min = val.startDate;
  state.filter.createdDate.max = val.endDate;
}

function tabChange(index) {
  state.current = index;
  // 清空筛选项
  state.searchParams.projectId = null;
  state.filter.createdBy = '';
  state.filter.createdDate.max = '';
  state.filter.createdDate.min = '';
  state.timeName = '提交时间';
  state.owner = '提交人';
  calendarRef.value.init();
  if (state.current === 0) {
    state.tabTitle = '我的待办';
    getTodoList();
    getPersonList('todo_list');
  } else if (state.current === 1) {
    state.tabTitle = '我发起的';
    getMyCreate();
    getPersonList('my_create_list');
  } else if (state.current === 2) {
    state.tabTitle = '我处理的';
    getDoneList();
    getPersonList('done_list');
  }
}

function getTodoList(callback) {
  const params = {
    filter: {
      processDefinitionId: state.todoParams,
      ...state.filter,
    },
    pageSize: 1000,
    pageNo: 1,
    sort: {
      field: 'lastModifiedDate',
      direction: 'DESC',
    },
  };
  if (!params.filter.createdDate.min) {
    delete params.filter.createdDate;
  }
  post('/workflow-platform/api/v1/process_instance/task/todo_list', params).then(({ data }) => {
    const taskIdList = data.content
      .map((item) => item.formDataList[0].taskId)
      .filter((taskId) => taskId !== undefined);
    let oldData = data.content;
    post('/solution-ppm/api/v2/built-in-system-ppm/delivery_task/search/batch_query', {
      taskIdList,
      projectId: state.searchParams.projectId,
    }).then(({ data }) => {
      oldData.forEach((originalItem) => {
        // 获取原数据中的 taskId
        const originalTaskId = originalItem.formDataList[0].taskId;

        // 在新数据中查找匹配的 taskId
        const matchingData = data.find((item) => item.taskId === originalTaskId);

        // 如果找到匹配的数据，则更新原数据
        if (matchingData) {
          originalItem.formDataList[0].milepostName = matchingData.milepostName;
          originalItem.formDataList[0].projectName = matchingData.projectName;
          originalItem.formDataList[0].taskName = matchingData.taskName
            ? matchingData.taskName
            : originalItem.formDataList[0].taskName;
        }
      });
      // state.todoList = oldData.filter(item => item.formDataList[0].projectName);
      state.todoList = oldData;

      callback && callback();
    });
  });
}

/**
 * 获取提交人
 * @param type: {done_list,todo_list,my_create_list}
 */
function getPersonList(type = 'todo_list') {
  post(`/solution-ppm/api/v2/built-in-system-ppm/dashboard/approve/task/${type}`, {
    filter: {},
    pageSize: 1000,
    pageNo: 1,
    sort: {
      field: 'lastModifiedDate',
      direction: 'DESC',
    },
  }).then((res) => {
    state.submitterList = res.data;
  });
}

function getMyCreate(callback) {
  const params = {
    filter: {
      processName: state.myCreateParams,
      ...state.filter,
    },
    pageSize: 1000,
    pageNo: 1,
    sort: {
      field: 'lastModifiedDate',
      direction: 'DESC',
    },
  };
  if (!params.filter.createdDate.min) {
    delete params.filter.createdDate;
  }
  if (!params.filter.createdBy) {
    delete params.filter.createdBy;
  }
  post('/workflow-platform/api/v1/process_instance/task/my_create_list', params).then(
    ({ data }) => {
      const taskIdList = data.content
        .map((item) => item.formDataList[0].taskId)
        .filter((taskId) => taskId !== undefined);
      let oldData = data.content;
      post('/solution-ppm/api/v2/built-in-system-ppm/delivery_task/search/batch_query', {
        taskIdList,
        projectId: state.searchParams.projectId,
      }).then(({ data }) => {
        oldData.forEach((originalItem) => {
          // 获取原数据中的 taskId
          const originalTaskId = originalItem.formDataList[0].taskId;

          // 在新数据中查找匹配的 taskId
          const matchingData = data.find((item) => item.taskId === originalTaskId);

          // 如果找到匹配的数据，则更新原数据
          if (matchingData) {
            originalItem.formDataList[0].milepostName = matchingData.milepostName;
            originalItem.formDataList[0].projectName = matchingData.projectName;
            originalItem.formDataList[0].taskName = matchingData.taskName
              ? matchingData.taskName
              : originalItem.formDataList[0].taskName;
          }
        });
        // state.myCreate = oldData.filter(item => item.formDataList[0].projectName);
        state.myCreate = oldData;
        callback && callback();
      });
    },
  );
}

function getDoneList(callback) {
  const params = {
    filter: {
      processDefinitionId: state.doneParams,
      ...state.filter,
    },
    pageSize: 1000,
    pageNo: 1,
    sort: {
      field: 'lastModifiedDate',
      direction: 'DESC',
    },
  };
  if (!params.filter.createdDate.min) {
    delete params.filter.createdDate;
  }
  post('/workflow-platform/api/v1/process_instance/task/done_list', params).then(({ data }) => {
    const taskIdList = data.content
      .map((item) => item.formDataList[0].taskId)
      .filter((taskId) => taskId !== undefined);
    let oldData = data.content;
    post('/solution-ppm/api/v2/built-in-system-ppm/delivery_task/search/batch_query', {
      taskIdList,
      projectId: state.searchParams.projectId,
    }).then(({ data }) => {
      oldData.forEach((originalItem) => {
        // 获取原数据中的 taskId
        const originalTaskId = originalItem.formDataList[0].taskId;

        // 在新数据中查找匹配的 taskId
        const matchingData = data.find((item) => item.taskId === originalTaskId);

        // 如果找到匹配的数据，则更新原数据
        if (matchingData) {
          originalItem.formDataList[0].milepostName = matchingData.milepostName;
          originalItem.formDataList[0].projectName = matchingData.projectName;
          originalItem.formDataList[0].taskName = matchingData.taskName
            ? matchingData.taskName
            : originalItem.formDataList[0].taskName;
        }
      });
      // state.doneList = oldData.filter(item => item.formDataList[0].projectName);
      state.doneList = oldData;

      callback && callback();
    });
  });
}

function getNow() {
  get(`/config.json?t=${Date.parse(new Date()) / 1000}`).then((data) => {
    state.todoParams = data.todolist.processDefinitionId;
    state.myCreateParams = data.mycreate.processName;
    state.doneParams = data.donelist.processDefinitionId;
    getTodoList();
    getPersonList();
    getMyCreate();
    getDoneList();
  });
}

function handleDetail(id, type, instanceId, taskId, projectName, milepostName, processStatus) {
  handleRedirect(
    `/pages/Page3000000259/Page3000000259?id=${id}&type=${type}&instanceId=${instanceId}&taskId=${taskId}&processStatus=${state.tabTitle}&status=${processStatus}`,
  );
}

// watch(
//     () => route.fullPath,
//     (newVal, oldVal) => {
//         // 开发环境 currentRoute 获取的是对象实例，需要在meta.route中获取路径，线上环境获取的直接是路径
//         if (newVal.includes("Page3000000258")) {
//             get('/base/api/v1/product/detail/prdppm').then(({ data }) => {
//                 const userData = JSON.parse(localStorage.getItem('app-user-store'));

//                 // 修改 productId
//                 userData.productId = data.id;
//                 localStorage.setItem('app-user-store', JSON.stringify(userData));
//                 getNow()
//             })
//         }
//     },
//     {
//         deep: true,
//         immediate: true
//     }
// )
onShow(() => {
  get('/base/api/v1/product/detail/prdppm').then(({ data }) => {
    const userData = JSON.parse(localStorage.getItem('app-user-store'));

    // 修改 productId
    userData.productId = data.id;
    localStorage.setItem('app-user-store', JSON.stringify(userData));
    getNow();
  });
});
</script>
<style lang="less" scoped>
.page_root {
  min-height: 100%;
  box-sizing: border-box;
}

.page_root {
  min-height: 100%;
  box-sizing: border-box;
}

.page_root {
  min-height: 100%;
  box-sizing: border-box;
  background: linear-gradient(180deg, #e1effd 100%, #ffffff 0%);
  overflow: hidden !important;
}

.main {
  height: calc(100vh - 20px);
  background: linear-gradient(180deg, #e1effd 100%, #ffffff 0%);
  padding: 15px 15px 0 15px;
  border-top-left-radius: 16px;
  border-top-right-radius: 16px;
  position: relative;
  overflow: auto;
}

.custom-tabs {
  display: flex;
  position: relative;
  background-color: #3673c9;
}

.custom-tab {
  flex: 1;
  text-align: center;
  cursor: pointer;
  padding: 10px;
  background-color: transparent;
  position: relative;
  font-size: 16px;
  color: #b8d0ec;
  letter-spacing: 0;
  text-align: center;
  font-weight: 400;
  transition: border-color 0.6s;
  text-align: center;
}

.custom-tab.active {
  background-color: transparent;

  font-size: 16px;
  color: #ffffff;
  letter-spacing: 0;
  font-weight: 600;
  text-align: center;
}

.custom-tab-underline {
  display: block;
  width: 40px;
  height: 2px;
  background-color: #fff;
  position: absolute;
  bottom: 0;
  left: calc(50% - 20px);
  transition: width 0.6s;
}

.circle {
  position: absolute;
  height: 15px;
  min-width: 15px;
  right: 19px;
  top: 8px;
  border-radius: 50%;
  /* 将div变为圆形 */
  background-color: red;
  /* 红色背景 */
  color: white;
  /* 白色文字 */
  line-height: 15px;
  text-align: center;
  padding: 0 1px;
}

.tip-num {
  display: block;
  font-size: 10px;
}

.bgc-img {
  position: absolute;
  width: 100%;
  height: 300px;
  left: 0;
  top: -180px;
  // background-image: url('@/static/images/b30897b8627382dcffa568166e0e9596.png');
  background-size: cover;
}

.border-middle {
  width: 1px;
  height: 23px;
  position: absolute;
  border: 1px solid #729fd8;
  left: 35%;
  top: 50%;
  transform: translate(-33%, -50%);
}

.border-middle1 {
  width: 1px;
  height: 23px;
  position: absolute;
  border: 1px solid #729fd8;
  left: 68%;
  top: 50%;
  transform: translate(-66%, -50%);
}

.approve-item {
  position: relative;
  background: #ffffff;
  box-shadow: 0 0 10px 0 #cfe7ff;
  border-radius: 3px;
  margin-bottom: 15px;
  line-height: 1.5;
  overflow: hidden;
}

.approve-inner {
  border: 2px solid;
  border-image: linear-gradient(360deg, rgba(41, 129, 223, 0) 0%, rgba(41, 129, 223, 1) 100%) 3 3 3
    3;
  height: 100%;
}

.item-title {
  height: 32px;
  background-image: linear-gradient(90deg, #cde8fd 0%, rgba(205, 232, 253, 0) 100%);
  border-radius: 3px 3px 0 0;
  line-height: 32px;
  padding: 0 15px;
  font-family: PingFangSC-Semibold;
  font-size: 16px;
  color: #262626;
  letter-spacing: 0;
  font-weight: 600;
  white-space: nowrap; /* 不换行 */
  overflow: auto;
}

.item-content-top {
  padding: 8px 15px;
}

.work-title {
  font-family: PingFangSC-Regular;
  font-size: 14px;
  color: #595959;
  letter-spacing: 0;
  font-weight: 400;
  display: inline-block;
}

.bottom-work-num {
  font-family: PingFangSC-Semibold;
  font-size: 14px;
  color: #262626;
  letter-spacing: 0;
  font-weight: 600;
}

.people-work-title {
  font-family: PingFangSC-Regular;
  font-size: 13px;
  color: #595959;
  letter-spacing: 0;
  font-weight: 400;
  display: inline-block;
}

.people-bottom-work-num {
  font-family: PingFangSC-Semibold;
  font-size: 13px;
  color: #262626;
  letter-spacing: 0;
  font-weight: 600;
}

.item-line {
  border-bottom: 1px solid #a6c2e4;
  margin-top: 12px;
}

.item-people {
  height: 20px;
  width: 50%;
  padding: 0 15px;
  background-image: linear-gradient(270deg, rgba(205, 232, 253, 0) 0%, #cde8fd 100%);
  line-height: 20px;
}

.item-content-bottom {
  padding: 8px 15px;
}

.bottom-btn-wrapper {
  display: inline-flex;
  justify-content: space-between;
  width: 100%;
  padding: 0 14px;
  margin-bottom: 16px;
}
.item-bottom-title {
  margin: 4px 0;
}

.bottom-btn {
  //position: absolute;
  //right: 15px;
  //bottom: 15px;
  width: 42px;
  height: 22px;
  background: #008bff;
  border-radius: 4px;
  color: #fff;
  font-size: 13px;
  color: #ffffff;
  letter-spacing: 0;
  font-weight: 400;
  line-height: 22px;
  text-align: center;
}

.bottom-btn-name {
  //position: absolute;
  //left: 15px;
  //bottom: 15px;
  margin-right: 20rpx;
  background: #e6f4ff;
  border: 1px solid #bae0ff;
  border-radius: 4px;
  font-family: PingFangSC-Regular;
  font-size: 12px;
  color: #1677ff;
  line-height: 20px;
  font-weight: 400;
  height: 22px;
  text-align: center;
  padding: 0 16rpx;
}
.bottom-btn-handle {
  //position: absolute;
  //left: 108px;
  //bottom: 15px;
  background: #e6f4ff;
  border: 1px solid #bae0ff;
  border-radius: 4px;
  font-family: PingFangSC-Regular;
  font-size: 12px;
  color: #1677ff;
  line-height: 20px;
  font-weight: 400;
  width: 52px;
  height: 22px;
  text-align: center;
}

.bottom-btn-reject {
  //position: absolute;
  //left: 108px;
  //bottom: 15px;

  background: #fff1f0;
  border: 1px solid #ffccc7;
  border-radius: 4px;
  font-family: PingFangSC-Regular;
  font-size: 12px;
  color: #ff4d4f;
  line-height: 20px;
  font-weight: 400;
  width: 52px;
  height: 22px;
  text-align: center;
}

.bottom-btn-success {
  //position: absolute;
  //left: 108px;
  //bottom: 15px;
  background: #f6ffed;
  border: 1px solid #d9f7be;
  border-radius: 4px;
  font-family: PingFangSC-Regular;
  font-size: 12px;
  color: #52c41a;
  text-align: justify;
  line-height: 20px;
  font-weight: 400;
  width: 52px;
  height: 22px;
  text-align: center;
}

.no-content {
  height: calc(100vh - 100px);
  position: relative;
}

.no-content-img {
  position: absolute;
  height: 61px;
  width: 62px;
  // background-image: url('@/static/images/dd1a8dca6cde6f75014ffaba1e461b20.png');
  background-size: cover;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

.no-content-tip {
  top: 70px;
  width: 100px;
  left: 47px;
  position: absolute;
  transform: translate(-50%, -50%);
  color: #9fa0a0;
}

.top-tip {
  position: relative;
  margin-bottom: 15px;
}

.tab-bar {
  position: fixed;
  bottom: 0;
  height: 75px;
  width: 100%;
  background: #ffffff;
  border-radius: 8px 8px 0 0;
  display: flex;
}

.board,
.task,
.my,
.approve {
  border: 1px solid red;
  width: 25%;
  display: flex;
  flex-direction: column;
  padding: 14px;
  align-items: center;
}

.board-icon,
.approve-icon,
.my-icon,
.task-icon {
  height: 50%;
}

.board-text,
.approve-text,
.my-text,
.task-text {
  height: 50%;
  font-family: PingFangSC-Regular;
  font-size: 16px;
  color: #000000;
  letter-spacing: 0;
  text-align: center;
  font-weight: 400;
}

.approve-text {
  font-family: PingFangSC-Medium;
  font-size: 16px;
  color: #0071ff;
  letter-spacing: 0;
  text-align: center;
  font-weight: 500;
}

.vid_7mh049olev {
  top: -3px;
}

.page_root .search-params * {
  //color: #fff;
  text-align: center;
}
.page_root .search-params :deep(.input-placeholder) {
  color: #fff !important;
}

.page_root .search-params :deep(.uni-input-input),
.container .search-params :deep(.uicon-arrow-down-fill) {
  color: #fff !important;
  font-size: 30rpx !important;
  overflow-x: auto !important;
  text-align: center;
}

.page_root .search-params :deep(.uicon-arrow-down-fill) {
  font-size: 24rpx !important;
}

.page_root .search-params {
  background: #3575c7;
  height: 90rpx;
  padding: 0 30rpx;
}

:deep(.u-cascader-asymmetric__body__picker-view__item) {
  color: #262626;
  margin-bottom: 16rpx;
}
:deep(.u-cascader-asymmetric__body__picker-view__item:first-child) {
  margin-top: 20rpx;
}
:deep(.u-cascader-asymmetric__body__picker-view__item-selected) {
  color: #3875ff;
}
:deep(
    .u-cascader-asymmetric__body__selected
      .uni-scroll-view-content
      .u-cascader-asymmetric__body__selected-item
  ) {
  margin-right: 30rpx;
  color: #262626;
}
.bottom-btn-revoke {
  background: rgb(235, 235, 235);
  border-radius: 4px;
  border: 1px solid rgb(235, 235, 235);
  font-family: PingFangSC-Regular;
  font-size: 12px;
  color: #262626;
  text-align: justify;
  line-height: 20px;
  font-weight: 400;
  width: 52px;
  height: 22px;
  text-align: center;
}
</style>
